home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / source / fullr_2 / fullrot.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-29  |  2.1 KB  |  115 lines

  1. #include <conio.h>
  2. #include <memory.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <pc.h>
  6. #include <go32.h>
  7. #include <sys/types.h>
  8.  
  9. #include "gfxmisc.h"
  10.  
  11. void gfxNewRotate(char *image, char *screen, int angle)
  12. {
  13.     register long rowU, rowV, dU, dV;
  14.     unsigned long y, x, u, v, tx, ty;
  15.  
  16.     dU = sinTab[angle];
  17.     dV = cosTab[angle];
  18.  
  19.     rowU = startingPointU[angle];
  20.     rowV = startingPointV[angle];
  21.  
  22.     y=200;
  23.     while (y--) {
  24.         u = rowU;
  25.         v = rowV;
  26.  
  27.         x = 320;
  28.         while (x--) {
  29.             ty = (v >> 10);
  30.             tx = (u >> 10);
  31.  
  32.             if (ty<=199 && tx<=319) {
  33.                 *screen = *(image + yTab[ty] + tx);
  34.             }
  35.             screen++;
  36.  
  37.             u+=dV;
  38.             v+=dU;
  39.         }
  40.  
  41.         rowU -= dU;
  42.         rowV += dV;
  43.     }
  44. }
  45.  
  46. void main(void)
  47. {
  48.     int angle = 0;
  49.     int aDir = 4;
  50.     char *scrImage;
  51.     char *screen;
  52.     long frames = 0L;
  53.     u_short convSel = _go32_conventional_mem_selector();
  54.     u_short mySel = _go32_my_ds();
  55.     unsigned scrOffset;
  56.     unsigned imgOffset;
  57.     double start_time, end_time;
  58.  
  59.     screen = (char *) malloc(64000);
  60.     if (screen == NULL) {
  61.         printf("Error allocating screen memory.\n");
  62.         return;
  63.     }
  64.     memset(screen, 0, 64000);
  65.     scrOffset = (unsigned) screen;
  66.  
  67.     gfxInitTables();
  68.  
  69.     gfxSetMode(0x13);
  70.     gfxExtendMode();
  71.  
  72.     scrImage = gfxLoadPCX("test.pcx", NULL);
  73.     imgOffset = (unsigned) scrImage;
  74.  
  75.     movedata(mySel, imgOffset, convSel, 0xA0000, 64000);
  76.     getch();
  77.  
  78.     start_time = clock();
  79.     while (!kbhit()) {
  80.         gfxNewRotate(scrImage, screen, angle);
  81.  
  82.         movedata(mySel, scrOffset, convSel, 0xA0000, 64000);
  83.         memset(screen, 0, 64000);
  84.  
  85.         angle += aDir;
  86.         if (angle >= 255) {
  87.             angle = 255;
  88.             aDir = -4;
  89.         } else if (angle < 1) {
  90.             angle = 0;
  91.             aDir = 4;
  92.         }
  93.  
  94.         frames++;
  95.     }
  96.     end_time = clock();
  97.  
  98.     getch();
  99.  
  100.     gfxSetMode(0x03);
  101.  
  102.     printf("scrImage: %p, %x (%p, %x)\n", scrImage, (unsigned) scrImage, &scrImage, (unsigned) &scrImage);
  103.     printf("     DOS: %x\n", convSel);
  104.  
  105.     free(scrImage);
  106.     free(screen);
  107.  
  108.     gfxCleanup();
  109.  
  110.     printf("  Time: %3.2f\n", (double) ((end_time-start_time) / 1000000));
  111.     printf("Frames: %lu\n", frames);
  112.     printf("   FPS: %3.2f\n", (double) (double) frames / (double) ((end_time-start_time) / 1000000));
  113. }
  114.  
  115.